//算式填符号：110
public class A {
    //1.循环也能做，但是八个循环进行嵌套，太麻烦
    //2.递归从后面向前面(也就是说从最后一个下标开始填)考虑是更好的，从前向后考虑的话，1-（后面一大堆未进行计算的数字）就非常的不方便
    //
    //a:参加运算的元素
    //b：目前考虑的元素的下标
    //so:合成好的结果串
    //goal：计算目标
    static void f(int[]a,int k,String so,int goal) {
        //找边界
        if (k==0) {
            if (a[0]==goal) System.out.println(a[0]+so);//为啥这里要加a[0]
            return;
        }
        //如果符号为+
        f(a,k-1,"+"+a[k]+so,goal-a[k]);
        //如果符号为-
        f(a,k-1,"-"+a[k]+so,goal+a[k]);
        //如果没有符号
        int old = a[k-1];
        a[k-1] = Integer.parseInt(""+a[k-1]+a[k]);//直接进行字符串转数字，这样就不用*10
        f(a,k-1,so,goal);
        a[k-1] = old;//为什么a[k-1]还要回去
    }
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5,6,7,8,9};
        f(a,8,"",110);
    }
}
